<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 在`ES6`中，只要一种数据结构具有了`Symbol.iterator`属性，那么就认为是可以迭代的

        let arr = ["a",2,3,4];

        // console.log(arr); //包含Symbol(Symbol.iterator)

        // 可以使用for of
        // console.log(arr[Symbol.iterator]); //ƒ values() { [native code] }


        // 使用Symbol.iterator 获取到的是一个迭代器对象
        // console.log(arr[Symbol.iterator]()); //Array Iterator {}

        // 迭代器对象下面 有个next方法
        let iArr = arr[Symbol.iterator]();

        console.log(iArr);

        //  console.log(iArr.next); //ƒ next() { [native code] }

        // value ： 执行第一次迭代所得到的数组值
        // done：遍历未完成
        console.log(iArr.next());  //{value: "a", done: false}

        // value ： 执行第二次迭代所得到的数组值
        // done：遍历未完成
        console.log(iArr.next());  //{value: 2, done: false}

        // value ： 执行第三次迭代所得到的数组值
        // done：遍历未完成
        console.log(iArr.next());  //{value: 3, done: false}

        // value ： 执行第四次迭代所得到的数组值
        // done：遍历未完成
        console.log(iArr.next());  //{value: 4, done: false}


        // value ： 执行第五次迭代所得到的数组值
        // done：遍历完成
        console.log(iArr.next());  //{value: undefined, done: true}


        // for of 
        // for(let i of arr){
        //     console.log(i);
        // }


        // let s1 = new Set([1,2,3]);

        // console.log(s1); //Symbol.iterator
    </script>
</body>
</html>